Developer(s) | James McCartney and others |
---|---|
Initial release | 1996 |
Stable release | 3.4.4 / July 8, 2011 |
Operating system | FreeBSD[1], Linux, Mac OS X, Windows |
License | GNU General Public License |
Website | http://supercollider.sourceforge.net/ |
SuperCollider is an environment and programming language originally released in 1996 by James McCartney for real-time audio synthesis and algorithmic composition.[2][3]
Since then it has been evolving into a system used and further developed by both scientists and artists working with sound. It is an efficient and expressive dynamic programming language which makes it an interesting framework for acoustic research, algorithmic music and interactive programming.
Released under the terms of the GNU General Public License in 2002, SuperCollider is free software. The major release (3.4) was released in July 2010.[4]
Contents |
Since version 3 the SuperCollider environment is split into a server, scsynth, and a client, sclang, that communicate using OSC (Open Sound Control).
SC Language combines the object oriented structure of Smalltalk and features from functional programming languages with a C family syntax.
The SC Server application supports a simple C plugin API making it easy to write efficient sound algorithms (unit generators) which can then be combined into graphs of calculations. Because all external control in the server happens via OSC, it is possible to use it with other languages or applications.
SuperCollider's sound generation is bundled into an optimised command-line executable (named scsynth). In most cases it is controlled from within the SuperCollider programming language, but it can be used independently. The audio server has the following features:
The SuperCollider programming language is related to Smalltalk and functional languages, with a C family syntax. Its architecture strikes a balance between the needs of realtime computation and the flexibility and simplicity of an abstract language. Like many functional languages, it implements functions as first class objects, which may be composed. Functions and methods may have default argument values, variable length argument lists and may be called with any order keyword arguments. Closures are lexical, scope is both lexical and dynamic. Further features typical of functional languages, like closure creation via partial application (explicit currying), tail call optimization, list comprehensions and coroutines are supported. Specifics include the implicit expansion of tuples and the stateless pattern system. Its constant time message lookup and real time garbage collection allows large systems to be efficient and to handle signal processing flexibly.
By supporting methods of reflective, conversational and literate programming, SuperCollider makes it relatively easy to find new sound algorithms[6] and to develop custom software as well as custom frameworks. With regards to domain specific knowledge, it is both general (e.g. it allows to represent properties such as time and pitch in variable degrees of abstraction) and copious of example implementations for specific purposes.
The SuperCollider language allows users to construct cross-platform graphical user interfaces for applications. The standard class library with user interface components may be extended by a number of available frameworks. For interactive programming, the system supports programmatic access to rich text code files. It may be used to generate vector graphics algorithmically.
Because the server is controlled using Open Sound Control (OSC), a variety of applications can be used to control the server. SuperCollider language environments (see below) are typically used, but other OSC-aware systems can be used such as Pure Data.
"Third-party" clients for the SuperCollider server exist, including rsc3, a Scheme client, hsc3, based on Haskell and Overtone, based on Clojure.[7] These are distinct from the development environments mentioned below because they do not provide an interface to SuperCollider's programming language, instead they communicate directly with the audio server and provide their own approaches to facilitating user expression.
SuperCollider runs under Mac OS X, Linux, Windows and FreeBSD. The Windows version, however, tends to lag behind the others since most development is based on Mac and Linux. For each of these operating systems there are multiple language-editing environments and clients that can be used with SuperCollider (see below).
SuperCollider is also available on a Live CD called pure:dyne (a GNU/Linux distribution based on Debian).
The Mac version of SuperCollider is most commonly used from within its own Mac-specific (Cocoa) interface; and the Windows version comes with a (cross-platform) Python-based development environment (named PsyCollider). Alternatively, SuperCollider code can be developed and run from a number of common development environments such as:
For each of the above environments, a plugin enables the real-time execution of SuperCollider code and interaction with the audio server.
// print "Hello world!" "Hello world!".postln;
// play a mixture of pink noise and an 800 Hz sine tone { SinOsc.ar(800, 0, 0.1) + PinkNoise.ar(0.01) }.play;
// modulate a sine frequency and a noise amplitude with another sine // whose frequency depends on the horizontal cursor position { var x = SinOsc.ar(MouseX.kr(1, 100)); SinOsc.ar(300 * x + 800, 0, 0.1) + PinkNoise.ar(0.1 * x + 0.1) }.play;
// list iteration: create a collection of indices multiplied by their values [1, 2, 5, 10, -3].collect { arg item, i; item * i; };
// factorial function f = { arg x; if(x == 0) { 1 } { f.(x-1) * x } };
As a versatile dynamic programming language, SuperCollider can be used for live coding, i.e. performances which involve the performer modifying and executing code on-the-fly.[8] Specific kinds of proxies serve as high level placeholders for synthesis objects which can be swapped in and out or modified at runtime. Environments allow sharing and modification of objects and process declarations over networks.[9] Various extension libraries support different abstraction and access to sound objects, e.g. dewdrop_lib allows for the live creation and modification of pseudo-classes and -objects.